#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
异步任务使用示例
"""

import time
from typing import Dict, Any, Optional

from .decorators import async_task, get_task_status
from settings.config import logger


# 示例1：使用装饰器创建异步任务
@async_task(task_type='example_task')
def example_long_running_task(task_id: str, params: Dict[str, Any], account_id: Optional[str] = None) -> Dict:
    """
    示例长时间运行任务
    
    Args:
        task_id: 任务ID
        params: 任务参数
        account_id: 账号ID
        
    Returns:
        dict: 任务结果
    """
    # 模拟长时间运行的任务
    logger.info(f"开始执行示例任务: {task_id}")
    
    # 获取参数
    duration = params.get('duration', 10)  # 默认运行10秒
    steps = params.get('steps', 5)  # 默认5个步骤
    
    result = {}
    
    # 模拟分步骤执行
    for i in range(steps):
        # 模拟每个步骤的处理时间
        time.sleep(duration / steps)
        
        # 记录步骤结果
        result[f'step_{i+1}'] = {
            'status': 'completed',
            'time': time.time()
        }
        
        logger.info(f"任务 {task_id} 完成步骤 {i+1}/{steps}")
    
    logger.info(f"示例任务完成: {task_id}")
    
    return {
        'steps_completed': steps,
        'duration': duration,
        'details': result
    }


# 示例2：如何提交和查询任务
def submit_example_task():
    """
    提交示例任务并查询状态
    """
    # 提交任务
    result = example_long_running_task(
        params={
            'duration': 5,  # 运行5秒
            'steps': 3      # 3个步骤
        },
        account_id='example_account'
    )
    
    task_id = result.get('task_id')
    logger.info(f"任务已提交: {task_id}")
    
    # 查询任务状态
    for _ in range(10):
        status = get_task_status(task_id)
        logger.info(f"任务状态: {status.get('status')}, 消息: {status.get('message')}")
        
        if status.get('status') in ['completed', 'failed']:
            logger.info(f"任务结束: {status}")
            break
            
        time.sleep(1)
    
    return task_id